package ar.com.seminario.systema.service;

import java.util.List;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import ar.com.seminario.common.persistence.exception.DaoException;
import ar.com.seminario.common.service.definition.BaseService;
import ar.com.seminario.common.service.exception.ServiceException;
import ar.com.seminario.systema.dao.LogInnDao;
import ar.com.seminario.systema.model.OpcionMenu;
import ar.com.seminario.systema.model.Usuario;

/**
 * Servicio para el manejo el log inn de la aplicacion.
 * 
 * @author Pablo Lamas
 */
@Service
@Transactional
public class LogInnService extends BaseService implements ILogInnService {

	/**
	 * Logger del Servicio.
	 */
	private static final Logger LOG = LoggerFactory.getLogger(LogInnService.class);

	public Usuario isAValidUser(String username, String password) throws ServiceException {

		if (username == null || password == null) {
			LogInnService.LOG.error("Error obteniendo un usuario con username y password: " + username + " - "
					+ password);
			throw new ServiceException("Usuario y Contraseña del usuario son obligatorios.");
		}

		try {

			final LogInnDao dao = this.getDaoFactory().newDao(LogInnDao.class);
			return (Usuario) dao.getUsuarioByUsernamePassword(username, password);

		} catch (final DaoException e) {
			LogInnService.LOG.error("Error obteniendo un usuario con username y password: " + username + " - "
					+ password, e);
			throw new ServiceException(e);
		}

	}

	public List<OpcionMenu> getOptionsByUserId(Long userId) throws ServiceException {

		if (userId == null) {
			LogInnService.LOG.error("Error obteniendo el menu del usuario con id: " + userId);
			throw new ServiceException("id del usuario es obligatorio");
		}

		try {
			
			final LogInnDao dao = this.getDaoFactory().newDao(LogInnDao.class);
			return dao.getOptionsByUserId(userId);
			
		} catch (final DaoException e) {
			LogInnService.LOG.error("Error obteniendo el menu del usuario con id: " + userId, e);
			throw new ServiceException(e);
		}
	}

}
